#include <stdio.h>
#include <stdbool.h>

double my_atof(const char *str) {
    double result = 0.0;    // 最终的浮点结果
    double fraction = 1.0;   // 用于处理小数部分
    int sign = 1;            // 符号
    bool decimal_point = false; // 标记是否遇到小数点

    // 跳过空白字符
    while (*str == ' '|| *str =='0') {
        str++;
    }

    // 处理符号
    if (*str == '-') {
        sign = -1;
        str++;
    } else if (*str == '+') {
        str++;
    }

    // 解析数字部分
    while (*str) {
        if (*str >= '0' && *str <= '9') {
            if (!decimal_point) {
                result = result * 10.0 + (*str - '0'); // 整数部分
            } else {
                fraction /= 10.0; // 小数部分的分母
                result += (*str - '0') * fraction; // 小数部分
            }
        }
        else if (*str == '.') {
            decimal_point = true; // 标记已经遇到小数点
        } else {
            break; // 遇到非数字字符，结束解析
        }
        str++;
    }

    return sign * result; // 返回结果并考虑符号
}

int main() {
    const char *num_str = "  -123.4567";
    double value = my_atof(num_str);
    printf("字符串 \"%s\" 转换为浮点数: %.1f\n", num_str, value);
    return 0;
}
